From ae07b208fe4e228068282ad76cfd69ab9e96dc9f Mon Sep 17 00:00:00 2001
From: Russell King <rmk+kernel@arm.linux.org.uk>
Date: Mon, 28 Dec 2015 13:55:13 +0100
Subject: [PATCH] implement slot capabilities (SSPL)

---
 drivers/pci/host/pci-mvebu.c | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/host/pci-mvebu.c b/drivers/pci/host/pci-mvebu.c
index 7980be0..0e9b820 100644
--- a/drivers/pci/host/pci-mvebu.c
+++ b/drivers/pci/host/pci-mvebu.c
@@ -65,6 +65,12 @@
 #define  PCIE_STAT_BUS                  0xff00
 #define  PCIE_STAT_DEV                  0x1f0000
 #define  PCIE_STAT_LINK_DOWN		BIT(0)
+#define PCIE_SSPL		0x1a0c
+#define  PCIE_SSPL_MSGEN		BIT(14)
+#define  PCIE_SSPL_SPLS(x)		(((x) & 3) << 8)
+#define  PCIE_SSPL_SPLS_VAL(x)		(((x) >> 8) & 3)
+#define  PCIE_SSPL_SPLV(x)		((x) & 0xff)
+#define  PCIE_SSPL_SPLV_VAL(x)		((x) & 0xff)
 #define PCIE_RC_RTSTA		0x1a14
 #define PCIE_DEBUG_CTRL         0x1a60
 #define  PCIE_DEBUG_SOFT_RESET		BIT(20)
@@ -119,7 +125,6 @@ struct mvebu_sw_pci_bridge {
 	u16 bridgectrl;
 
 	/* PCI express capability */
-	u32 pcie_sltcap;
 	u16 pcie_devctl;
 	u16 pcie_rtctl;
 };
@@ -640,8 +645,12 @@ static int mvebu_sw_pci_bridge_read(struct mvebu_pcie_port *port,
 		break;
 
 	case PCISWCAP_EXP_SLTCAP:
-		*value = bridge->pcie_sltcap;
+	{
+		u32 tmp = mvebu_readl(port, PCIE_SSPL);
+		*value = PCIE_SSPL_SPLS_VAL(tmp) << 15 |
+			 PCIE_SSPL_SPLV_VAL(tmp) << 7;
 		break;
+	}
 
 	case PCISWCAP_EXP_SLTCTL:
 		*value = PCI_EXP_SLTSTA_PDS << 16;
@@ -824,6 +833,15 @@ static int mvebu_sw_pci_bridge_write(struct mvebu_pcie_port *port,
 		mvebu_writel(port, value, PCIE_CAP_PCIEXP + PCI_EXP_LNKCTL);
 		break;
 
+	case PCISWCAP_EXP_SLTCAP:
+	{
+		u32 sspl = PCIE_SSPL_SPLV((value & PCI_EXP_SLTCAP_SPLV) >> 7) |
+			   PCIE_SSPL_SPLS((value & PCI_EXP_SLTCAP_SPLS) >> 15) |
+			   PCIE_SSPL_MSGEN;
+		mvebu_writel(port, sspl, PCIE_SSPL);
+		break;
+	}
+
 	case PCISWCAP_EXP_RTCTL:
 		old = bridge->pcie_rtctl;
 		bridge->pcie_rtctl = value & (PCI_EXP_RTCTL_SECEE |
-- 
1.9.1

